package top.caozj.task;

import top.caozj.util.NoDataPolicy;

import java.util.*;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * 传感器数据管理器
 * 负责跟踪传感器状态，处理在线和离线传感器的数据
 */
public class SensorDataManager {
    
    // 所有传感器配置
    private Set<String> allSensors;

    private Set<String> offSetSensors;

    
    // 离线数据处理策略
    /**
     * ignore: 忽略未处理的传感器数据
     * fixed: 使用固定值填充未处理的传感器数据
     */
    private NoDataPolicy nodataPolicy;
    
    // 固定值策略时使用的固定值
    private Double fixedValue;
    
    /**
     * 构造函数
     * @param sensors 所有传感器配置
     * @param policy 无数据策略 (ignore/fixed)
     * @param value 固定值
     */
    public SensorDataManager(Set<String> sensors, NoDataPolicy policy, Double value) {
        this.allSensors = new CopyOnWriteArraySet<>(sensors);
        this.offSetSensors = new CopyOnWriteArraySet<>(sensors);
        this.nodataPolicy = policy;
        this.fixedValue = value;
    }

    /**
     * 重置离线传感器为所有传感器
     */
    public void reset() {
        offSetSensors.clear();
        offSetSensors.addAll(allSensors);
    }
    
    /**
     * 标记传感器为已处理状态（即已查询到数据）
     * @param sensorId 传感器ID
     */
    public void markSensorAsProcessed(String sensorId) {
        if (allSensors.contains(sensorId)){
            offSetSensors.remove(sensorId);
        }
    }


    public Set<String> getOffSetSensors() {
        return offSetSensors;
    }


    /**
     * 获取当前配置的无数据策略
     * @return 策略名称
     */
    public NoDataPolicy getNodataPolicy() {
        return nodataPolicy;
    }
    
    /**
     * 获取当前配置的固定值
     * @return 固定值
     */
    public Double getFixedValue() {
        return fixedValue;
    }
}